package com.doudou.collection.domain.service;

import com.doudou.collection.infrastructure.common.security.CurrentPrincipal;
import com.doudou.collection.orm.dto.BlogDTO;
import com.doudou.collection.orm.vo.BlogCategoriesVO;
import com.doudou.collection.orm.vo.BlogDetailVO;
import com.doudou.collection.orm.vo.BlogSimpleVO;
import com.doudou.collection.orm.vo.ContentIndexVO;

import java.util.List;

/**
 * className: BlogService<br>
 * description: 博客业务逻辑类<br>
 * author: 李浩文<br>
 * date: 2023/6/13 20:44<br>
 * version: 1.0<br>
 */
public interface BlogService {

    /**
     * 发布文章功能
     * @param blogDTO
     * @return
     */
    void insert(CurrentPrincipal currentPrincipal, String articleLocation,BlogDTO blogDTO);


    /**
     * 删除文章
     * @param id
     * @return
     */
    void delete(Long id);


    /**
     * 根据id获取文章具体信息,增加一个浏览量
     * @param id
     * @return
     */
    BlogDetailVO detailById(Long id);


    /**
     * 获取文章的所有类别
     * @param
     * @return
     */
    List<BlogCategoriesVO> selectAllCategories();


    /**
     * 根据分类id获取文章列表功能
     * @param categoriesId
     * @return
     */
    List<ContentIndexVO> queryAllArticle(Integer categoriesId);


    /**
     * 显示推荐所有文章功能
     * @return
     */
    List<ContentIndexVO> recommendedBlog();


    /**
     * 在文章详情页获取该作者的其他文章
     * @return
     */
    List<BlogSimpleVO> selectOthersByUserId(Long userId);





    /**
     * 获取热门文章
     * @return
     */
    List<BlogSimpleVO> selectHot();





    /**
     * 通过关键字搜索文章的业务逻辑
     */
    List<ContentIndexVO> search(String wd);




    /**
     * 查询用户发布的所有文章
     * @param id
     * @return
     */
    List<ContentIndexVO> selectSelfBlogsById(Long id);


    /**
     * 查询用户点赞的所有文章
     * @param id
     * @return
     */
    List<ContentIndexVO> selectLikeBlogsAllById(Long id);

    /**
     * 查询用户收藏的所有文章
     * @param id
     * @return
     */
    List<ContentIndexVO> selectCollectBlogsAllById(Long id);

    /**
     * 根据文章id查询点赞数量并更新
     * @param blogId
     * @return
     */
    void updateBlogLikedFromUserLiked(Long blogId);


}
